// 导入 Vue Router 模块中的 createRouter 和 createWebHistory 函数
import {createRouter, createWebHistory} from 'vue-router'
import {unauthorized} from "@/net";

// 创建一个路由器实例
// 这个路由器使用 HTML5 的 history API 来管理路由，允许使用自定义的 base URL
const router = createRouter({
    // 设置路由的历史管理方式为 HTML5 的 history 模式
    // 使用环境变量 BASE_URL 作为基础 URL
    history: createWebHistory(import.meta.env.BASE_URL),
    // 定义路由规则的数组
    // 这里配置了应用中的所有路由路径、名称和对应的组件
    routes: [
        {
            // 根路径
            path: '/',
            // 路由名称
            name: 'welcome',
            // 对应的组件，使用动态导入来加载组件
            component: () => import('@/views/WelcomeView.vue'),
            // 子路由配置
            children: [
                {
                    // 空路径，表示默认子路由
                    path: '',
                    // 子路由名称
                    name: 'welcome-login',
                    // 子路由对应的组件，同样使用动态导入
                    component: () => import('@/views/welcome/LoginPage.vue')
                }, {
                    // 空路径，表示默认子路由
                    path: 'register',
                    // 子路由名称
                    name: 'welcome-register',
                    // 子路由对应的组件，同样使用动态导入
                    component: () => import('@/views/welcome/RegisterPage.vue')
                }, {
                    // 空路径，表示默认子路由
                    path: 'reset',
                    // 子路由名称
                    name: 'welcome-reset',
                    // 子路由对应的组件，同样使用动态导入
                    component: () => import('@/views/welcome/ResetPage.vue')
                }
            ]
            // 定义一个路由配置对象
        }, {
            // 路径为/index
            path: '/index',
            // 路由名称为'index'
            name: 'index',
            // 使用懒加载方式导入组件，提高应用的性能
            // 当路由匹配时，才会加载对应的组件
            component: () => import('@/views/IndexView.vue'),
            children: [
                {
                    path: '',
                    name: 'topic-list',
                    component: () => import('@/views/forum/TopicList.vue')
                },
                {
                    path: 'user-setting',
                    name: 'user-setting',
                    component: () => import('@/views/settings/UserSettings.vue')
                }, {
                    path: 'privacy-setting',
                    name: 'privacy-setting',
                    component: () => import('@/views/settings/PrivacySetting.vue')
                }
            ]
        }
    ]
})

//路由守卫
/**
 * 在路由跳转前执行的钩子函数
 * 该函数根据目标路由和用户认证状态来决定下一步的路由跳转
 * @param {Route} to 即将要进入的目标路由对象
 * @param {Route} from 当前导航正要离开的路由对象
 * @param {Function} next 路由跳转的下一个步骤，必须调用
 */
router.beforeEach((to, from, next) => {
    // 检查用户是否未授权
    const isUnauthorized = unauthorized();
    // 如果目标路由以 "welcome-" 开头且用户已授权，则重定向到 '/index'
    if (to.name.startsWith("welcome-") && !isUnauthorized) {
        next('/index')
        // 如果目标路由以 "/index" 开头且用户未授权，则重定向到根路由 '/'
    } else if (to.fullPath.startsWith("/index") && isUnauthorized) {
        next('/')
        // 其他情况，继续进行路由跳转
    } else {
        next()
    }
})

// 导出路由器实例，以便在应用中使用
export default router
